﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ControlsLib;
using System.Linq.Expressions;
using GestionePolveri2.DAL;
using LinqKit;
using System.Data.Objects;
using FrameworkLib.Filters;

namespace GestionePolveriLib.BL.Filters
{
    public class CronologiaFilterBag : FilterBase<Movimenti>, IFilterBase
    {
        public string Operatore { get; set; }
        public string Fornitore { get; set; }
        public string CodicePolvere { get; set; }
        public string CodiceLotto { get; set; }
        public string CausaleScarico { get; set; }

        public CronologiaFilterBag()
        {

        }

        public override Expression<Func<Movimenti, bool>> SetUpFilter()
        {
            var predicate = PredicateBuilder.True<Movimenti>();

            if (this.UseDates)
            {
                // aggiungi al filtro il controllo sulla data...
                predicate = predicate.And(im => (EntityFunctions.TruncateTime(im.DataMovimento) >= EntityFunctions.TruncateTime(this.PeriodFrom)) &&
                                                 EntityFunctions.TruncateTime(im.DataMovimento) <= EntityFunctions.TruncateTime(this.PeriodTo));
            }

            if (!string.IsNullOrWhiteSpace(CodicePolvere))
            {
                predicate = predicate.And(im => im.AnagPolveri.CodicePolvere == CodicePolvere);
            }

            if (!string.IsNullOrWhiteSpace(CodiceLotto))
            {
                predicate = predicate.And(im => im.Lotti.CodLotto == CodiceLotto);
            }

            if (!string.IsNullOrWhiteSpace(Fornitore))
            {
                predicate = predicate.And(im => im.AnagPolveri.AnagFornitori.Descrizione == Fornitore);
            }

            if (!string.IsNullOrWhiteSpace(Operatore))
            {
                predicate = predicate.And(im => im.aspnet_Users.UserName == Operatore);
            }

            if (!string.IsNullOrWhiteSpace(CausaleScarico))
            {
                predicate = predicate.And(im => im.CausaliScarico.CodCausaleScarico == CausaleScarico);
            }

            return predicate;
        }

        //public override Func<Report512, bool> SetUpFilter(Action expression)
        //{

        //    return null; //new Func<Report512, bool>((((item.DataMovimento >= this.PeriodFrom) && (item.DataMovimento <= this.PeriodTo)));
        //}



        //public static Func<T, bool> BuildEqFuncFor<T>(string prop, object val)
        //{
        //    return ((t => t.GetType().InvokeMember(prop, System.Reflection.BindingFlags.GetProperty, null, t, null) == val) 
        //        (t => t.GetType().InvokeMember(prop, System.Reflection.BindingFlags.GetProperty, null, t, null) == val));
        //}
    }
}
